package com.cskaoyan.javase.array.operation6.search4;

/**
 * @description: 查找数组中的某个元素的位置
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 数组元素查找（查找指定元素第一次在数组中出现的索引）
 * 没办法用增强for循环了
 * 遍历数组，然后比较数据，直到找到该元素的下标，然后返回即可
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,123,213,4324,13,23,43,2};
        int targetValue = 999;
        System.out.println("目标值"+targetValue+"在数组中最后一次出现的下标是："+searchIndex(arr, targetValue));
        System.out.println("目标值"+targetValue+"在数组中第一次出现的下标是："+searchIndex2(arr, targetValue));


    }

    //思考：我这个需求应该传入几个参数，传啥？
    //需要传入两个数据，被查找的数组和被查找的值
    //这个方法返回的是目标值最后一次出现的下标位置，并不是第一次
    public static int searchIndex(int[] arr, int targetValue) {
        //应该要在外部返回数组的下标，所以你需要在外部定义一个下标
        //当没有一个值对应的时候，返回-1，代表数组中没有目标值
        int targetIndex = -1;
        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            //判断这个值是不是目标值
            if (arr[i] == targetValue) {
                //找到了该下标
                targetIndex = i;
            }
        }
        //需要在for循环外部返回下标，我能够直接在外面返回i吗？
        return targetIndex;
    }

    //怎么改？变成第一次？
    public static int searchIndex2(int[] arr, int targetValue) {
        //应该要在外部返回数组的下标，所以你需要在外部定义一个下标
        //当没有一个值对应的时候，返回-1，代表数组中没有目标值
        int targetIndex = -1;
        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            //判断这个值是不是目标值
            if (arr[i] == targetValue) {
                //找到了该下标
                //应该立刻终止循环，停止找下去了，这样找到的才是第一个下标
                targetIndex = i;
                //能不能写return 不能直接写return 必须加上返回值
                break;
                //return i;
            }
        }
        //需要在for循环外部返回下标，我能够直接在外面返回i吗？
        return targetIndex;
    }
}
